/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package manager.helpers.validation;

import java.util.LinkedList;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import manager.auxiliares.Format;

/**
 *
 * @author Thiago
 */
public class ValidationFunctions {

    /**
     * * Valida uma string para um determinado campo
     * @param str String que será validada
     * @param strMatch String que deverá ser comparada com str. Se for igual a null não é necessário esta validação
     * @param jLabel Label que irá exibir se a string esta válida ou não através de cores.
     * @param type Tipo de validação que será feita
     * @param minSize Tamanho mínimo da string a se validar. Se for igual a -1 não é necessário esta validação
     * @param maxSize Tamanho maximo da string a se validar. Se for igual a -1 não é necessário esta validação
     */
    public static boolean validade(String str, String strMatch, String type, int maxSize, int minSize) {
        if ((minSize != -1 && str.length() < minSize) || (maxSize != -1 && str.length() > maxSize)
                || (strMatch != null && !strMatch.equals(str))) {
            return false;
        } else {
            if (type.equalsIgnoreCase("text")) {
                if (!str.equals("")) {
                    return true;
                }
            } else if(type.equalsIgnoreCase("number")){
                 if (Format.isInteger(str)) {
                    return true;
                }
            } else if(type.equalsIgnoreCase("double")){
                 if (Format.isDouble(str)) {
                    return true;
                }
            } else if (type.equalsIgnoreCase("email")) {
                //Input the string for validation  
                //Set the email pattern string  
                Pattern p = Pattern.compile(".+@.+\\.[a-z]+");

                //Match the given string with the pattern  
                Matcher m = p.matcher(str);

                //check whether match is found   
                boolean matchFound = m.matches();

                if (matchFound) {
                    return true;
                }
            } else if (type.equalsIgnoreCase("cpf")) {
                if (Format.isCPF(str)) {
                    return true;
                }
            } else if (type.equalsIgnoreCase("cnpj")) {
                if (Format.isCNPJ(str)) {
                    return true;
                }
            } else if (type.equalsIgnoreCase("date")) {
                if (str.matches(Format.getDatePattern())) {
                    return true;
                }
            } else if (type.equalsIgnoreCase("money")) {
                if (Format.isDouble(str)) {
                    return true;
                }
            }
        }
        return false;
    }

    public static String getValidationMessage(LinkedList<String> validationFields) {
        int size = validationFields.size();
        String message = "";
        for (int i = 0; i < validationFields.size(); i++) {
            if (i == 0) {
                message += validationFields.get(i);
            } else {
                message += ", " + validationFields.get(i);
            }
        }
        if (size == 1) {
            message = "O campo (" + message + ") não está preenchido corretamente.";
        } else if (size > 1) {
            message = "Os campos (" + message + ") não estão preenchidos corretamente.";
        }
        return message;
    }
}
